众所周知,Table 由于其不方便换行的固有特性,且常常存在一行大量文本,正在逐渐与现代的自适应布局脱节。Grid 与 Flex 的效果固然不错,但有没有什么方法能将简单的 Table 进行简单的自适应并保持代码(例如 Wikitext)的基本格式以对代码力较差的大众也能看懂?
答案自然是有的,当你去网上搜索便能发现一些使用
attr()
的 CSS 转换,亦或者是用 JS 进行更复杂的转换。
而本篇介绍的便是
attr()
的进阶方法,毕竟每个元素都要设置
data-
值也太烦了……
@media (max-width: 576px) { .flextable, .flextable > tbody, .flextable tr { display: block; } .flextable th { display: none; } .flextable tr { margin-block: .5em; } .flextable td { display: list-item; text-align: right; margin-left: 4em; } @counter-style flextable-114514 { system: fixed; suffix: ":"; symbols: "标题1" "标题2" "标题3"; } .flextable#flextable-114514 { list-style: flextable-114514; } .flextable td::marker { font-weight: bolder; } .flextable td[data-th]::marker { content: attr(data-th) ":"; } }
标题1 | 标题2 | 标题3 |
---|---|---|
内容1 | 内容2 | 内容3 |
内容4 | 内容5 | 内容6 |
内容7 | 内容8 | 内容9 |
此方法仅适用于十分基础的表格,但我想这大概也挺有用的。可惜其中主要的参数 MediaWiki 的纯 CSS / 已过滤的 CSS 并不支持。
思路是将表格转换为有序列表,通过
symbols
统一指定标题。data-th
值可用于特别指定一个标题,虽然感觉没什么用。
这里不对代码进行详细解释,请自行查阅例如 MDN 等相关文档,如果还是看不懂,或许你不该在这里。